package main

import "fmt"

type MethodUtils struct {
}

func (method MethodUtils) print() {
	for i := 1; i <= 2; i++ {
		for j := 1; j <= 1; j++ {
			fmt.Print("*")
		}
		fmt.Println()
	}
}

func (method MethodUtils) print02(m, n int) {
	for i := 1; i <= m; i++ {
		for j := 1; j <= n; j++ {
			fmt.Print("*")
		}
		fmt.Println()
	}
}

func (method *MethodUtils) printSquare(len, width float64) (square float64) {
	return len * width
}

func (method *MethodUtils) JudgeNum(num int) {
	if num%2 == 0 {
		fmt.Println("这个数是偶数")
	} else {
		fmt.Println("这个数是奇数")
	}
}

func (method *MethodUtils) print03(row, colunm int, str string) {
	for i := 0; i < row; i++ {
		for j := 0; j < colunm; j++ {
			fmt.Print(str)
		}
		fmt.Println()
	}
}

type Calcuator struct {
	Num1 float64
	Num2 float64
}

func (calcu *Calcuator) cal(calstr string) float64 {
	res := 0.0
	// if calstr == "+" {
	// 	res = (*calcu).Num1 + (*calcu).Num2
	// }
	// if calstr == "-" {
	// 	res = (*calcu).Num1 - (*calcu).Num2
	// }
	// if calstr == "*" {
	// 	res = (*calcu).Num1 * (*calcu).Num2
	// }
	// if calstr == "/" {
	// 	res = (*calcu).Num1 / (*calcu).Num2
	// }
	switch calstr {
	case "+":
		res = (*calcu).Num1 + (*calcu).Num2
	case "-":
		res = (*calcu).Num1 - (*calcu).Num2
	case "*":
		res = (*calcu).Num1 * (*calcu).Num2
	case "/":
		res = (*calcu).Num1 / (*calcu).Num2
	default:
		fmt.Printf("输入的运算符号'%v'有误\n" + calstr)
	}
	return res
}

func main() {
	//main方法中打印一个 10*8 的矩形
	var method MethodUtils
	method.print()

	//打印一个m*n的矩形
	m := 2
	n := 5
	method.print02(m, n)

	//接受长len 宽width 计算面积，将其作为方法的返回值
	//在main方法中调用该方法，接受返回的面积值并打印
	len := 4.4
	width := 2.0
	square := (&method).printSquare(len, width)
	fmt.Println(square)

	//判断一个数是奇数还是偶数
	(&method).JudgeNum(5)

	//根据行、列、字符打印 如行：2 列：3 字符：*
	(&method).print03(2, 3, "&")

	//实现 加减乘除四个功能
	//实现形式1 分四个方法 分别计算
	//实现形式2： 一个方法实现
	var cal Calcuator
	(&cal).Num1 = 10.2
	(&cal).Num2 = 26
	res := cal.cal("#")
	fmt.Printf("res=%v \n", fmt.Sprintf("%.2f", res))
}
